package com.feather.common.data.simple;

import java.util.ArrayList;

import com.feather.common.data.DataColumn;
import com.feather.common.data.DataColumnCollection;
import com.feather.common.data.DataItem;
import com.feather.common.data.DataItemCollection;
import com.feather.common.data.DataItemType;
import com.feather.common.data.DataTable;
import com.feather.common.data.DataTableCollection;

/**
 * @author flogyin
 */
public class SimpleDataItemCollection implements DataItemCollection, java.io.Serializable {
	private static final long		serialVersionUID	= 1L;

	protected ArrayList<DataItem>	collection			= new ArrayList<DataItem>();

	@Override
	public int getCount() {
		return this.collection.size();
	}

	@Override
	public DataItem get(int itemIndex) {
		return this.collection.get(itemIndex);
	}

	@Override
	public DataItem get(String columnName) {
		int columnIndex = indexOf(columnName);
		return columnIndex > -1 ? this.collection.get(columnIndex) : null;
	}

	// public DataItem add() {
	// return add((String)null);
	// }
	@Override
	public void add(DataItem dataItem) {
		if (dataItem != null)
			this.collection.add(dataItem);
	}

	// public DataItem add(String columnName)
	// {
	// SimpleColumn column = new SimpleColumn();
	// column.setName(columnName);
	// SimpleDataColumn dataColumn = new SimpleDataColumn(column);
	// this.collection.add(dataColumn);
	// return dataColumn;
	// }
	//
	// public boolean contains(String columnName) {
	// return indexOf(columnName) > -1;
	// }
	// public int indexOf(DataItem dataItem)
	// {
	// String name = null;
	// if (dataItem.getItemType() == DataItemType.DataColumnItem) {
	// name = ((DataColumn)dataItem).getColumn().getName();
	// }
	// else if (dataItem.getItemType() == DataItemType.DataTableItem) {
	// name = ((DataTable)dataItem).getName();
	// }
	// return dataItem != null ? indexOf(name) : -1;
	// }
	public int indexOf(String columnName) {
		if (columnName != null) {
			int count = getCount();
			for (int i = 0; i < count; i++) {
				DataItem dataItem = this.collection.get(i);
				String temp = null;
				if (dataItem.getItemType() == DataItemType.DataColumnItem) {
					temp = ((DataColumn) dataItem).getColumn().getName();
				} else if (dataItem.getItemType() == DataItemType.DataTableItem) {
					temp = ((DataTable) dataItem).getName();
				}
				if (columnName.equalsIgnoreCase(temp))
					return i;
			}
		}
		return -1;
	}

	// public void remove(DataItem column)
	// {
	// int columnIndex = indexOf(column);
	// if (columnIndex > -1)
	// this.collection.remove(columnIndex);
	// }
	// public void remove(String columnName)
	// {
	// int columnIndex = indexOf(columnName);
	// if (columnIndex > -1)
	// this.collection.remove(columnIndex);
	// }
	@Override
	public void clear() {
		this.collection.clear();
	}

	@Override
	public DataColumnCollection getColumns() {
		int count = getCount();
		SimpleDataColumnCollection dataColumns = new SimpleDataColumnCollection();
		for (int i = 0; i < count; i++) {
			DataItem dataItem = this.collection.get(i);
			if (dataItem.getItemType() == DataItemType.DataColumnItem)// if
																		// (dataItem
																		// instanceof
																		// DataColumn)
				dataColumns.add((DataColumn) dataItem);
		}
		return dataColumns;
	}

	@Override
	public DataTableCollection getTables() {
		int count = getCount();
		SimpleDataTableCollection dataTables = new SimpleDataTableCollection();
		for (int i = 0; i < count; i++) {
			DataItem dataItem = this.collection.get(i);
			if (dataItem.getItemType() == DataItemType.DataTableItem)// if
																		// (dataItem
																		// instanceof
																		// DataTable)
				dataTables.add((DataTable) dataItem);
		}
		return dataTables;
	}
}
